﻿#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>

using namespace std;

//struct Stu//结构体类型声明（不占空间）
//{
//	string name;
//	int age;
//	int chinese;
//	int math;
//	int total;
//}s4,s5,s6;//在结构体类型声明的同时顺便创建结构体变量
//
//int main()
//{
//	struct Stu s1 = {"zhnagsan",20,90,80,0};//开始占空间
//	struct Stu s2;
//	s2 = s1;
//	//结构体成员的访问；
//	  s1.total = s1.chinese + s1.math;
//	  cout << s1.total << endl;
//	return 0;
//}



// 结构体嵌套 //

//struct score
//{
//	int chinese;
//	int math;
//	int english;
//
//};
//struct Stu
//{
//	string name;
//	score sc;
//	int total;
//	int avg;
//
//};
//
//int main()
//{
//	Stu s1 = { "wangwu",{80,90,60} ,0,0};
//	s1.total = s1.sc.chinese + s1.sc.english + s1.sc.math;
//	s1.avg = s1.total / 3;
//	cout << s1.total << " " << s1.avg << endl;
//	return 0;
//}



// //结构体成员函数// //
// cpp和c的区别在此处，c的结构体没有结构体成员函数；

// 自定义的成员函数
//struct Stu
//{
//	//成员变量
//	string name;
//	int chinese;
//	int math;
//	int total;
// 	//用成员函数，初始化结构体成员变量
//	void init_stu()
//	{
//		name = "小明";
//		chinese = 100;
//		math = 100;
//		total = chinese + math;
//	}
//	void print_stu()
//	{
//		cout <<"名字：" << name << endl;
//		cout <<"语文：" << chinese << endl;
//
//	}
//};
//int main()
//{
//	struct Stu s1;//创建
//	s1.init_stu();//调用初始化
//	s1.print_stu();
//
//	return 0;
//}

//struct Stu
//{
//	//成员变量
//	string name;
//	int chinese;
//	int math;
//	int total;
// 	//默认成员函数//构造函数
//	Stu()
//	{
//		cout << "调用构造函数"<<endl;
//		name = "王小明 ";
//		chinese = 120;
//		math = 100;
//		total = math + chinese;
//
//	}
//	~Stu()
//	{
//		cout << "调用析构函数" << endl;
//		//资源释放的工作
//		chinese = 0;
//	}
//	void print_stu()
//	{
//		cout <<"名字：" << name << endl;
//		cout <<"语文：" << chinese << endl;
//	}
//	
//};
//int main()
//{
//	struct Stu s1;//创建
//	 s1.print_stu();
//	return 0;
//}



struct Stu
{
	string name;
	int chinese;
	int math;
	int total;
};


// //运算符重载// //
ostream& operator<<(ostream& os, struct Stu& s)
{
	os << "名字: " << s.name << endl;
	os << "语文: " << s.chinese << endl;
	os << "数学: " << s.math << endl;
	os << "总分: " << s.total << endl;
	return os;
}
int main()
{
	struct Stu s = { "张三",90,80,170 };
	cout << s << endl;
	return 0;
}

